home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 37 / Amiga Format CD37 (1999-02-16)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-03].iso / -screenplay- / shareware / invasionforce / source / cyber_new1.c < prev    next >
C/C++ Source or Header  |  1999-01-09  |  3KB  |  86 lines

  1. /*
  2. AI Code for Invasion Force - an Explore/Conquer Strategic Wargame
  3. Copyright (C) 1996  Brannen Hough
  4.  
  5. This program is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU General Public License
  7. as published by the Free Software Foundation; either version 2
  8. of the License, or any later version.
  9.  
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. /*
  20.     cyber_new1.c -- artificial intelligence module for Empire II
  21.     This is the second iteration of it.  For "Neutral" players
  22.  
  23. */
  24.  
  25. /* This file contains all the routines associated with AI Type #1A.
  26. */
  27.  
  28. #include "global.h"
  29.  
  30.  
  31. /***************************************************************
  32. *************** Orders Routines      ***************************
  33. ***************************************************************/
  34.  
  35. void  New_AI1_play_turn ( int new_units )
  36. {
  37.     int   MaxLooping = 1000;
  38.     /* Here we may want to look around, give out some orders to units,
  39.        and execute orders to units in a loop until we have done all the 
  40.        moves possible for the units.
  41.        */
  42.     AI1_do_all_histograms();
  43.     New_AI1_give_orders();
  44.     /* We'll add a little failsafe so we don't spend eternity here */
  45.     while( (MaxLooping > 0) && (!DoUnitActions(40,60)) )  MaxLooping--;
  46.     if( MaxLooping <= 0 ) 
  47.     DEBUG_AI("Error!! Exitting AI player's turn - out of actions")
  48.     return;
  49. }
  50.  
  51.  
  52. void  New_AI1_give_orders()
  53. {
  54.     struct  Unit   *unit = (struct Unit *)unit_list.mlh_Head;
  55.     struct GovNode *Gov = NULL;
  56.    
  57.     for (;unit->unode.mln_Succ; unit = (struct Unit *)unit->unode.mln_Succ) 
  58.         if ((unit->owner == player) && (unit->move > 0) && 
  59.             (unit->orders == NULL)) {
  60.             /* No orders yet, let's set some
  61.            Ok, we own the unit, and it has moves left, and has a Governor
  62.            owner, and has no standing orders
  63.            Don't just stand there, do something!
  64.            */
  65.         /* sprintf(outbuf, "Giving initial orders to unit named %s at %ld,%ld", 
  66.                unit->name, unit->col, unit->row);
  67.                DEBUG_AI(outbuf)
  68.            */
  69.             Gov = AI1_FindOwner (unit);
  70.             if (Gov != NULL) {
  71.         if( IsCityTaken( Gov ) ) {
  72.             /* Have the unit move to the city's location */
  73.             ComputerGiveOrders (unit, C_ORDER_GOTO, Gov->x, 
  74.                           Gov->y, -1, -1, -1);
  75.         }
  76.         else {
  77.             /* Have the unit wander randomly */
  78.             ComputerGiveOrders (unit, C_ORDER_RANDOM, -1, -1, 
  79.                           -1,-1, -1);
  80.         }
  81.         }
  82.     } /* end if owner and has moves left */
  83.     /* End For */
  84. }
  85.  
  86.